home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / Libraries / SpriteWorld / SpriteWorld files / Headers / Sprite.h < prev    next >
Text File  |  1996-10-29  |  9KB  |  342 lines

  1. ///--------------------------------------------------------------------------------------
  2. //    Sprite.h
  3. //
  4. //    Portions are copyright: c 1991-94 Tony Myles, All rights reserved worldwide.
  5. //
  6. //    Description:    constants, structures, and prototypes for sprites
  7. ///--------------------------------------------------------------------------------------
  8.  
  9.  
  10. #ifndef __SPRITE__
  11. #define __SPRITE__
  12.  
  13. #ifndef __SWCOMMON__
  14. #include "SWCommonHeaders.h"
  15. #endif
  16.  
  17. #ifndef __SPRITEFRAME__
  18. #include "SpriteFrame.h"
  19. #endif
  20.  
  21.  
  22. #if PRAGMA_ALIGN_SUPPORTED
  23. #pragma options align=mac68k
  24. #endif
  25.  
  26.  
  27. ///--------------------------------------------------------------------------------------
  28. //    sprite type definitions
  29. ///--------------------------------------------------------------------------------------
  30.  
  31. typedef struct SpriteRec SpriteRec;
  32. typedef SpriteRec *SpritePtr, **SpriteHdl;
  33. typedef struct RectArray RectArray;
  34. typedef RectArray *RectArrayPtr, **RectArrayHdl;
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40.  
  41. typedef SW_FUNC void (*FrameProcPtr)(
  42.     SpritePtr srcSpriteP,
  43.     FramePtr curFrameP,
  44.     long *frameIndex);
  45.  
  46. typedef SW_FUNC void (*DrawProcPtr)(
  47.     FramePtr srcFrameP,
  48.     FramePtr dstFrameP, 
  49.     Rect *srcRect,
  50.     Rect *dstRect);
  51.  
  52. typedef SW_FUNC void (*MoveProcPtr)(
  53.     SpritePtr srcSpriteP);
  54.  
  55. typedef SW_FUNC void (*CollideProcPtr)(
  56.     SpritePtr srcSpriteP,
  57.     SpritePtr dstSpriteP,
  58.     Rect* sectRect);
  59.  
  60. typedef enum
  61. {
  62.     kSWDontRemoveSprite = 0,
  63.     kSWRemoveSprite,
  64.     kSWRemoveAndDisposeSprite
  65. } RemovalType;
  66.  
  67.  
  68. #ifdef __cplusplus
  69. }
  70. #endif
  71.  
  72. ///--------------------------------------------------------------------------------------
  73. //    Rect array data structure
  74. ///--------------------------------------------------------------------------------------
  75.  
  76. struct RectArray
  77. {
  78.     short        numFrames;
  79.     Rect        frameRects[];
  80. };
  81.  
  82. ///--------------------------------------------------------------------------------------
  83. //    sprite data structure
  84. ///--------------------------------------------------------------------------------------
  85.  
  86. struct SpriteRec
  87. {
  88.     SpritePtr nextSpriteP;                    // next sprite in that layer
  89.     SpritePtr prevSpriteP;                    // previous sprite in that layer
  90.     SpritePtr nextActiveSpriteP;            // next active sprite in the SpriteWorld
  91.     SpritePtr nextIdleSpriteP;                // next idle sprite in the SpriteWorld
  92.  
  93.         // drawing fields
  94.     Boolean        isVisible;                    // draw the sprite?
  95.     Boolean        needsToBeDrawn;            // sprite has changed, needs to be drawn
  96.     Boolean        needsToBeErased;            // sprite needs to be erased onscreen
  97.     Boolean        isUnderTiles;                // is the sprite behind the tiles?
  98.     Rect            destFrameRect;                // frame destination rectangle
  99.     Rect            oldFrameRect;                // last frame destination rectangle
  100.     Rect            deltaFrameRect;            // union of the sprite's lastRect and curRect
  101.     DrawProcPtr    frameDrawProc;                // callback to draw sprite
  102.     
  103.         // drawing fields for scrolling routines
  104.     Rect        clippedSourceRect;            // source sprite frame rect after clipping
  105.     Rect        destOffscreenRect;            // sprite's dest rect after clipping and offset
  106.     Rect        oldOffscreenRect;                // the destOffscreenRect from the previous frame
  107.     Boolean    destRectIsVisible;            // is destOffscreenRect visible on screen?
  108.     Boolean    oldRectIsVisible;                // was oldOffscreenRect visible on screen?
  109.  
  110.         // frame fields
  111.     FramePtr            *frameArray;            // array of frames
  112.     FramePtr            curFrameP;                // current frame
  113.     long                numFrames;                // number of frames
  114.     long                maxFrames;                // maximum number of frames
  115.     long                frameTimeInterval;    // time interval to advance frame
  116.     unsigned long     timeOfLastFrameChange; // time (from runningTimeCount) frame was last changed
  117.     long                frameAdvance;            // amount to adjust frame index
  118.     long                curFrameIndex;            // current frame index
  119.     long                firstFrameIndex;        // first frame to advance
  120.     long                lastFrameIndex;        // last frame to advance
  121.     FrameProcPtr     frameChangeProc;        // callback to change frames
  122.  
  123.         // movement fields
  124.     long            moveTimeInterval;            // time interval to move sprite
  125.     unsigned long timeOfLastMove;            // time (from runningTimeCount) sprite was last moved
  126.     short            horizMoveDelta;            // horizontal movement delta
  127.     short            vertMoveDelta;                // vertical movement delta
  128.     Rect            moveBoundsRect;            // bounds of the sprite's movement
  129.     MoveProcPtr    spriteMoveProc;            // callback to handle movement
  130.  
  131.         // collision detection
  132.     CollideProcPtr    spriteCollideProc;    // callback to handle collisions
  133.  
  134.         // miscellaneous
  135.     GWorldPtr    sharedPictGWorld;            // if common GWorld used for frames, here it is
  136.     GWorldPtr    sharedMaskGWorld;            // same for mask
  137.     RemovalType    spriteRemoval;                // whether to remove sprite, and if so how
  138.     
  139.     long            userData;                    // reserved for user
  140. };
  141.  
  142.  
  143. ///--------------------------------------------------------------------------------------
  144. //    sprite function prototypes
  145. ///--------------------------------------------------------------------------------------
  146.  
  147. #ifdef __cplusplus
  148. extern "C" {
  149. #endif
  150.  
  151. SW_FUNC OSErr SWCreateSprite(
  152.     SpritePtr* newSpriteP,
  153.     void* spriteStorageP,
  154.     short maxFrames);
  155.  
  156. SW_FUNC OSErr SWCreateSpriteFromCicnResource(
  157.     SpriteWorldPtr destSpriteWorld,
  158.     SpritePtr* newSpriteP,
  159.     void* spriteStorageP,
  160.     short cIconID,
  161.     short maxFrames,
  162.     MaskType maskType);
  163.  
  164. SW_FUNC OSErr SWCreateSpriteFromPictResource(
  165.     SpriteWorldPtr destSpriteWorld,
  166.     SpritePtr* newSpriteP,
  167.     void* spriteStorageP,
  168.     short pictResID,
  169.     short maskResID,
  170.     short maxFrames,
  171.     MaskType maskType);
  172.  
  173. SW_FUNC OSErr SWCreateSpriteFromSinglePict(
  174.     SpriteWorldPtr destSpriteWorld,
  175.     SpritePtr* newSpriteP,
  176.     void* spriteStorageP,
  177.     short pictResID,
  178.     short maskResID,
  179.     short frameWidth,
  180.     MaskType maskType);
  181.  
  182. SW_FUNC OSErr SWCreateSpriteFromSinglePictXY(
  183.         SpriteWorldPtr destSpriteWorld,
  184.         SpritePtr* newSpriteP,
  185.         void* spriteStorageP,
  186.         short pictResID,
  187.         short maskResID,
  188.         short frameWidth, short frameHeight,
  189.         short borderWidth,
  190.         short MaxFrames,
  191.         MaskType maskType);
  192.  
  193. SW_FUNC OSErr SWUpdateSpriteFromPictResource(
  194.     SpritePtr theSpriteP,
  195.     short pictResID);
  196.     
  197. SW_FUNC OSErr SWCloneSprite(
  198.     SpritePtr cloneSpriteP,
  199.     SpritePtr *newSpriteP,
  200.     void* spriteStorageP);
  201.  
  202. SW_FUNC void  SWRemoveSpriteFromAnimation(
  203.     SpriteWorldPtr    spriteWorldP,
  204.     SpritePtr        spriteP,
  205.     Boolean            disposeOfSprite);
  206.     
  207. SW_FUNC void SWDisposeSprite(
  208.     SpritePtr oldSpriteP);
  209.  
  210. SW_FUNC void SWCloseSprite(
  211.     SpritePtr deadSpriteP);
  212.  
  213. SW_FUNC void SWLockSprite(
  214.     SpritePtr srcSpriteP);
  215.  
  216. SW_FUNC void SWUnlockSprite(
  217.     SpritePtr srcSpriteP);
  218.  
  219. SW_FUNC OSErr SWSetSpriteDrawProc(
  220.     SpritePtr srcSpriteP,
  221.     DrawProcPtr drawProc);
  222.  
  223. SW_FUNC void SWStdSpriteDrawProc(
  224.     FramePtr srcFrameP,
  225.     FramePtr dstFrameP,
  226.     Rect* srcRect,
  227.     Rect* dstRect);
  228.  
  229. SW_FUNC OSErr SWAddFrame(
  230.     SpritePtr srcSpriteP,
  231.     FramePtr newFrameP);
  232.  
  233. SW_FUNC void SWRemoveFrame(
  234.     SpritePtr srcSpriteP,
  235.     FramePtr oldFrameP);
  236.  
  237. SW_FUNC void SWSetCurrentFrame(
  238.     SpritePtr srcSpriteP,
  239.     FramePtr curFrameP);
  240.  
  241. SW_FUNC void SWSetCurrentFrameIndex(
  242.     SpritePtr srcSpriteP,
  243.     short frameIndex);
  244.  
  245. SW_FUNC void SWSetSpriteFrameAdvance(
  246.     SpritePtr srcSpriteP,
  247.     short frameAdvance);
  248.  
  249. SW_FUNC void SWSetSpriteFrameRange(
  250.     SpritePtr srcSpriteP,
  251.     short firstFrameIndex,
  252.     short lastFrameIndex);
  253.  
  254. SW_FUNC void SWSetSpriteFrameTime(
  255.     SpritePtr srcSpriteP,
  256.     long timeInterval);
  257.  
  258. SW_FUNC void SWSetSpriteFrameProc(
  259.     SpritePtr srcSpriteP,
  260.     FrameProcPtr frameProc);
  261.  
  262. SW_FUNC void SWMoveSprite(
  263.     SpritePtr srcSpriteP,
  264.     short horizLoc,
  265.     short vertLoc);
  266.  
  267. SW_FUNC void SWOffsetSprite(
  268.     SpritePtr srcSpriteP,
  269.     short horizOffset,
  270.     short vertOffset);
  271.  
  272. SW_FUNC void SWSetSpriteLocation(
  273.     SpritePtr srcSpriteP,
  274.     short horizLoc,
  275.     short vertLoc);
  276.  
  277. SW_FUNC void SWSetSpriteMoveBounds(
  278.     SpritePtr srcSpriteP,
  279.     Rect* moveBoundsRect);
  280.  
  281. SW_FUNC void SWSetSpriteMoveDelta(
  282.     SpritePtr srcSpriteP,
  283.     short horizDelta,
  284.     short vertDelta);
  285.  
  286. SW_FUNC void SWSetSpriteMoveTime(
  287.     SpritePtr srcSpriteP,
  288.     long timeInterval);
  289.  
  290. SW_FUNC void SWSetSpriteMoveProc(
  291.     SpritePtr srcSpriteP, MoveProcPtr moveProc);
  292.  
  293. SW_FUNC void SWBounceSprite(
  294.     SpritePtr srcSpriteP);
  295.  
  296. SW_FUNC void SWWrapSprite(
  297.     SpritePtr srcSpriteP);
  298.  
  299. SW_FUNC void SWSetSpriteCollideProc(
  300.     SpritePtr srcSpriteP,
  301.     CollideProcPtr collideProc);
  302.  
  303. SW_FUNC Boolean SWRegionCollision(
  304.     SpritePtr srcSpriteP,
  305.     SpritePtr dstSpriteP);
  306.  
  307. SW_FUNC Boolean SWRadiusCollision(
  308.     SpritePtr srcSpriteP,
  309.     SpritePtr dstSpriteP);
  310.  
  311. SW_FUNC Boolean SWPixelCollision(
  312.     SpritePtr srcSpriteP,
  313.     SpritePtr dstSpriteP);
  314.  
  315. SW_FUNC void SWSetSpriteVisible(
  316.     SpritePtr srcSpriteP,
  317.     Boolean isVisible);
  318.  
  319. SW_FUNC Boolean SWIsSpriteInRect(
  320.     SpritePtr srcSpriteP,
  321.     Rect* testRect);
  322.  
  323. SW_FUNC Boolean SWIsSpriteFullyInRect(
  324.     SpritePtr srcSpriteP,
  325.     Rect* testRect);
  326.  
  327. SW_FUNC Boolean SWIsPointInSprite(
  328.     SpritePtr srcSpriteP,
  329.     Point testPoint);
  330.  
  331.  
  332. #ifdef __cplusplus
  333. }
  334. #endif
  335.  
  336. #if PRAGMA_ALIGN_SUPPORTED
  337. #pragma options align=reset
  338. #endif
  339.  
  340. #endif    /* __SPRITE__ */
  341.  
  342.